//this file is part of BBWin
//Copyright (C)2006 Etienne GRIGNON  ( etienne.grignon@gmail.com )
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either
//version 2 of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


namespace	DesignPattern {

template < typename Type > Type* Singleton< Type >::_instancePtr = NULL;

//------------------------------------------------------------------------------

template < typename Type >
inline Singleton< Type >::Singleton()
{
	// ------------------------------------------------
}

//------------------------------------------------------------------------------

template < typename Type >
inline Singleton< Type >::~Singleton()
{
	// ------------------------------------------------
}

//------------------------------------------------------------------------------

template < typename Type >
inline Type&				Singleton< Type >::getInstance()
{
	return *(getInstancePtr());
}

//------------------------------------------------------------------------------

template < typename Type >
inline 	void				Singleton< Type >::freeInstance()
{
	delete _instancePtr;
	_instancePtr = NULL;
}


//------------------------------------------------------------------------------

template < typename Type >
inline Type*				Singleton< Type >::getInstancePtr()
{
	if (NULL != _instancePtr)
		return _instancePtr;
	_instancePtr = new Type;
	return _instancePtr;
}

//------------------------------------------------------------------------------

} // DesignPattern
